"""
启动手动对战队列管理器的Django管理命令
"""
import logging
import signal
import sys
import time
from django.core.management.base import BaseCommand
from battles.battle_queue_manager import get_manual_battle_queue_manager

logger = logging.getLogger(__name__)


class Command(BaseCommand):
    help = '启动手动对战队列管理器'

    def add_arguments(self, parser):
        parser.add_argument(
            '--daemon',
            action='store_true',
            help='以守护进程模式运行',
        )

    def handle(self, *args, **options):
        """处理命令"""
        self.stdout.write(self.style.SUCCESS('正在启动手动对战队列管理器...'))
        
        # 获取队列管理器实例
        manager = get_manual_battle_queue_manager()
        
        # 设置信号处理器
        def signal_handler(signum, frame):
            self.stdout.write(self.style.WARNING('收到停止信号，正在关闭队列管理器...'))
            manager.stop_processing()
            sys.exit(0)
        
        signal.signal(signal.SIGINT, signal_handler)
        signal.signal(signal.SIGTERM, signal_handler)
        
        try:
            # 启动队列处理
            manager.start_processing()
            
            self.stdout.write(self.style.SUCCESS('手动对战队列管理器已启动'))
            self.stdout.write('按 Ctrl+C 停止服务')
            
            # 如果是守护进程模式，持续运行
            if options['daemon']:
                while manager.is_processing:
                    time.sleep(1)
            else:
                # 交互模式，等待用户输入
                try:
                    while True:
                        # 显示队列状态
                        status = manager.get_queue_status()
                        self.stdout.write(f"队列状态: {status['queue_count']}/{status['max_queue_size']}, "
                                        f"运行中: {status['running_count']}/{status['max_concurrent_battles']}")
                        time.sleep(10)
                except KeyboardInterrupt:
                    pass
            
        except Exception as e:
            self.stdout.write(self.style.ERROR(f'启动队列管理器失败: {e}'))
            logger.error(f"启动队列管理器失败: {e}")
        finally:
            manager.stop_processing()
            self.stdout.write(self.style.SUCCESS('手动对战队列管理器已停止'))